package com.example.dw.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.dw.entity.Course;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 课程Mapper接口
 * @author system
 * @since 2024-01-01
 */
@Mapper
public interface CourseMapper extends BaseMapper<Course> {

    /**
     * 获取热门课程（按点击量排序）
     */
    @Select("SELECT * FROM course ORDER BY courseClick DESC LIMIT #{limit}")
    List<Course> getCourseByHot(@Param("limit") Integer limit);

    /**
     * 获取精品课程（按评分排序）
     */
    @Select("SELECT * FROM course WHERE stars >= 4 ORDER BY stars DESC, courseClick DESC LIMIT #{limit}")
    List<Course> getCourseByGood(@Param("limit") Integer limit);

    /**
     * 获取热门课程Web版（分页）
     */
    @Select("SELECT * FROM course ORDER BY courseClick DESC LIMIT #{offset}, #{size}")
    List<Course> getCourseByHotWeb(@Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 获取精品课程Web版（分页）
     */
    @Select("SELECT * FROM course WHERE stars >= 4 ORDER BY stars DESC, courseClick DESC LIMIT #{offset}, #{size}")
    List<Course> getCourseByGoodWeb(@Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 获取热门课程总数
     */
    @Select("SELECT COUNT(*) FROM course")
    Integer getCourseHotCount();

    /**
     * 获取精品课程总数
     */
    @Select("SELECT COUNT(*) FROM course WHERE stars >= 4")
    Integer getCourseGoodCount();

    /**
     * 根据ID获取课程详情
     */
    @Select("SELECT * FROM course WHERE courseid = #{courseid}")
    Course getCourseById(@Param("courseid") Integer courseid);

    /**
     * 根据类型分页获取课程
     */
    @Select("SELECT * FROM course WHERE courseType = #{courseType} ORDER BY createdAt DESC LIMIT #{offset}, #{size}")
    List<Course> getCoursesByType(@Param("courseType") Integer courseType, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 根据类型获取课程总数
     */
    @Select("SELECT COUNT(*) FROM course WHERE courseType = #{courseType}")
    Integer getCourseCountByType(@Param("courseType") Integer courseType);

    /**
     * 模糊搜索课程
     */
    @Select("SELECT * FROM course WHERE courseName LIKE CONCAT('%', #{keyword}, '%') " +
            "ORDER BY createdAt DESC LIMIT #{offset}, #{size}")
    List<Course> searchCourses(@Param("keyword") String keyword, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 模糊搜索课程总数
     */
    @Select("SELECT COUNT(*) FROM course WHERE courseName LIKE CONCAT('%', #{keyword}, '%')")
    Integer searchCoursesCount(@Param("keyword") String keyword);

    /**
     * 根据热度排序获取课程（分页版本）
     */
    @Select("SELECT * FROM course ORDER BY courseClick DESC, isTop DESC LIMIT #{offset}, #{size}")
    List<Course> getCoursesByHotPage(@Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 获取所有课程总数
     */
    @Select("SELECT COUNT(*) FROM course")
    Integer getAllCourseCount();

    /**
     * 根据类型分页获取课程（Web端）
     */
    @Select("SELECT * FROM course WHERE courseType = #{courseType} " +
            "ORDER BY isTop DESC, createdAt DESC LIMIT #{offset}, #{size}")
    List<Course> getCoursesByTypePageWeb(@Param("courseType") Integer courseType, 
                                         @Param("offset") Integer offset, 
                                         @Param("size") Integer size);
} 